// 可借助闭包来实现一个只执行一次的函数

function once(func) {
  let hasBeenCalled = false;
  let result;
  return function () {
    if (!hasBeenCalled) {
      result = func.apply(this, arguments);
      hasBeenCalled = true;
    }
    return result;
  };
}

// 测试函数
function greet(name) {
  console.log(`Hello, ${name}!`);
  return `Greeted ${name}`;
}

const onceGreet = once(greet);
onceGreet('Alice'); // 输出: Hello, Alice!
onceGreet('Bob'); // 无输出，因为函数仅执行一次